<?php

define('DEBUG', FALSE);

/**
 * On redéfinit les chemins d'inclusions.
 */
set_include_path('./'             . PATH_SEPARATOR .
				'./Data'  		  . PATH_SEPARATOR .
				'./Application'   . PATH_SEPARATOR .
				'./Framework' 	  . PATH_SEPARATOR .
				'./_Class' 	 	  . PATH_SEPARATOR .
				'./_Core/_CLASS'  . PATH_SEPARATOR .
				get_include_path());

/**
 * On appelle le fichier principal du Framework.
 */
require_once 'Framework.php';

# Imports des packages de base
import('Controller.Front');
import('Configuration.Array');
import('Database.Dal.~');


$controller = Hoa_Controller_Front::getInstance();

# Configuration de base
/*
require_once 'Core.php';
$core = new Core(null);
$controller->attachObject('core', $core);
*/

$config = new Hoa_Configuration_Array(require 'config.php');
$controller->attachObject('config', $config);

//$controller->view->config = $config;

/*
include_once('Core.php');
$core = new Core($config);
$controller->attachObject('core', $core);
*/

# Configuration de base
require_once ('Head.php');
$head = new Head();

# Configuration de base du site
$head->setTitle($config->appli->titre, '=');
if(!DEBUG) {
	$head->addCssFile($config->rep->cssFile.'/style.css');
	$head->addCssFile($config->rep->cssFileForJs.'/jquery-ui-1.7.2.custom.css');
	$head->addCssFile($config->rep->cssFileForJs.'/slide/s3Slider.css');
	$head->addJsFile($config->rep->jsFileLib.'/jquery-1.3.2.min.js');
	$head->addJsFile($config->rep->jsFileLib.'/jquery-ui-1.7.2.custom.min.js');
	$head->addJsFile($config->rep->jsFileLib.'/s3Slider.js');
	$head->addJsFile($config->rep->jsFile.'/connec.js');
	$head->addJsFile($config->rep->jsFileLibUi.'/ui.dialog.js');
	$head->addJsFile($config->rep->jsFileLibUi.'/ui.draggable.js');
	$head->addJsFile($config->rep->jsFileLibUi.'/ui.resizable.js');
	$head->addJsFile($config->rep->jsFileLibUi.'/ui.bgiframe.js');
}

$controller->attachObject('head', $head);

# Gestion du cache
/*
$frontendOptions = array(
	'lifetime' => 600
);

$backendOptions = array(
	'cache_directory' => './'.$config->rep->cacheDirectory.'/'
);
$cache = Hoa_Cache::factory('Output', 'File', $frontendOptions, $backendOptions);
$controller->attachObject('cache', $cache);
*/

# Redéfinition de la base de Hoa
$controller->addRequest(0, array(
	// Type de routeur.
	'route.type'             => 'Rewrite',
	'route.directory'		 => $config->serveur->directory_site.'/Controller/(:module)/',
	'view.directory'		 => $config->serveur->directory_site.'/View/(:Theme)/',
	'view.theme' 			 => 'Danse',
	'model.directory'		 => $config->serveur->directory_site.'/Model/(:Controller)/',
	// Paramètres du routeur.
	'route.parameter'        => array(
		// Base du routeur.
		'base'               => $config->serveur->base,
		// Ensemble des règles de réécriture.
		'rules'              => array(
			// Règle par défaut.
			'default'        => array(
				'pattern'    => '/(:module)/(:action)/index.php',
				'default'    => array(
					'module' => 'index',
					'action' => 'index'
				)
			),
			// Règle simple.
			'simple'         => array(
			    'pattern'    => '/(:module)/(:action).php',

			    'default'    => array(
			        'module' => 'index',
			        'action' => 'index'
			    )
			)
		)
	)
));

#Connexion à la base de donnée
try {

	$db = Hoa_Database_Dal::getInstance(
		'myConn', // Identification de la connexion
		Hoa_Database_Dal::PDO,
		'mysql:host='.$config->db->dbhost.';dbname='.$config->db->dbname.'',
		''.$config->db->dbuser.'',
		''.$config->db->dbpassword.''
	);
} catch( Hoa_Database_Dal_Exception $e ){
	echo $e->getMessage();
	//$e->raiseError(self::ERROR_DIE);
	die();
}

/**
 * Activation des erreurs
 */
$controller->setThrowException(true);

try {
	/**
	 * On essaye de dispatcher.
	 */
	$controller->dispatch();
}
catch ( Hoa_Controller_Exception_ControllerIsNotFound $e ) {

	/**
	 * Le dispatche n'a pas été possible,
	 * car le contrôleur est introuvable.
	 * On lance alors le contrôleur d'erreur.
	 */
	$parametre = array(
		'route.directory' => 'Application/Controller/(:module)/',
	    'data.array.personal' => array(
	        'module' => 'index',
	        'action' => 'index'
	    )
	);

	/**
	 * On ajoute notre requête, c'est à dire
	 * que le seul contrôleur qui sera lancé
	 * sera ErreurController avec l'action
	 * PasTrouveAction.
	 */
	$controller->addRequest(0, $parametre);
	$controller->dispatch();
}
?>